home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / tex / tex82.dif < prev    next >
Encoding:
Text File  |  1986-02-14  |  96.5 KB  |  1,732 lines

  1. This file describes differences between TeX82, which is the portable standard
  2. definition of TeX in PASCAL, and the TeX systems written in SAIL.  (The SAIL
  3. version will NOT be brought up to date to make it compatible with TeX82; its use
  4. should gradually die away as more people take advantage of the new features
  5. available in the PASCAL version.)
  6.  
  7. * TeX82 does all its calculations that affect line breaking and page breaking
  8. using fixed-point integer arithmetic of limited (i.e., 32-bit) precision,
  9. instead of with floating-point computations, since different machines differ so
  10. widely in the results you get with floating point.
  11.  
  12. Dimensions are integers in units of 2^(-16) points, limited in magnitude to 2^14
  13. points (which is 18.89 feet).  This applies to all dimensions (e.g., the heights
  14. and widths and depths of boxes, the amounts by which you \raise or \lower a box,
  15. \varunits, etc.), except for the dimensions of stretching and shrinking.
  16.  
  17. Something different had to be done with respect to the dimensions of stretching
  18. and shrinking, since for example the old TeX defined \hfill to be a stretch of
  19. 10^10 points, and that number has more than 32 bits to the left of its binary
  20. point. After considering various alternatives, the solution introduced by the
  21. designers of MESA-TeX in 1979 has been adopted for TeX82. Each stretch or shrink
  22. dimension is specified by a fixed point integer that is either in units of
  23. 2^(-16)pt or 2^(-16)fil or 2^(-16)fill or 2^(-16)filll.  Here pt is, of course,
  24. one point; the other units are three orders of infinity, essentially infinity
  25. and infinity^2 and infinity^3. To add together such units of stretching or
  26. shrinking, one simply adds the individual components having the same order of
  27. infinity, and then uses the nonzero component having the highest order.
  28.  
  29. Thus, when one says "\hskip <a>pt plus <b>fil minus <c>filll", the numbers <a>,
  30. <b>, <c> are rounded to the nearest multiple of 2^(-16), and their magnitudes
  31. should be less than 2^(14). The stretch component is <b> times infinity, and the
  32. shrink component is <c> times infinity cubed.
  33.  
  34. * The shrink component of all glue used in a paragraph should be finite.
  35. Something like "\hskip 20pt minus 2fil" actually makes no sense in a paragraph,
  36. since the paragraph would fit on a single line no matter what. Infinite
  37. shrinkage does make sense in a simple \hbox, of course.
  38.  
  39. * Identifiers for control sequences in TeX82 are letter strings of any length,
  40. with upper and lower case letters treated as distinct even when they aren't the
  41. first letter. For example, \TeX is not the same as \TEX, and \GAMMA is not the
  42. same as \Gamma.  Any character that is regarded as a letter (this means the 52
  43. letters, initially, plus others that are \chcoded to 11) can appear in such
  44. control sequences. Of course, the one-character non-letter control sequences
  45. still exist as well.
  46.  
  47. * Characters by themselves can no longer masquerade as numbers. Thus, you
  48. shouldn't say "\chcode A" any more; this has caused more mysterious errors than
  49. it was worth, and anyway there will be a macro for defining fonts symbolically
  50. in TeX82. Instead, one can use a left quote in front of a character to get its
  51. ascii code; e.g., `A is '101, and `^^A is 1.  Furthermore you can use an escape
  52. in front of the character, e.g., `\A or `\% (these macros will not be expanded),
  53. so that we avoid the problem in TeX80 that you couldn't say "\chcode %" when %
  54. had already been chcoded.
  55.  
  56. * Hexadecimal constants are allowed, using a prefixed ". For example, "DF = '337
  57. = 223.
  58.  
  59. * \uccode <char number> is the character code to use when converting to upper
  60. case in the \uppercase function. For example, \uccode`a =`A.  (Probably nobody
  61. will change the default values unless a foreign alphabet is being used.)
  62. Characters whose uccode is zero will not be changed by the \uppercase function.
  63.  
  64. * \lccode <char number> is the character code to use when converting to lower
  65. case in the \lowercase function or when trying to hyphenate a word that contains
  66. upper case letters. For example, \lccode`A =`a. Characters whose lccode is zero
  67. will not be changed by the \lowercase function.  The lccode is also used for
  68. hyphenation; a character whose lccode is zero will be regarded as a nonletter
  69. (e.g., punctuation), and not part of a hyphenatable word, while a character
  70. whose lccode is identical to the character itself will be considered a lower
  71. case letter. For example, \lccode`a =`a.
  72.  
  73. * If \uchyph is nonzero, a word whose first letter is upper case will be subject
  74. to hyphenation. (This means a word whose first letter has lccode nonzero and
  75. lccode not equal to the character itself.) Words whose first letter is lower
  76. case will always be subject to hyphenation even if they contain upper case
  77. letters further on.
  78.  
  79. * Both \looseness and \parshape are now reset to their default values after each
  80. paragraph, as \hangindent always was. They are also reset at the beginning
  81. of a \vbox.
  82.  
  83. * Font codes are now control sequences instead of letters, so there is
  84. no longer a 64-font restriction. For example, one says "\font\ff=cmr10 at 12pt"
  85. to load the font identified by \ff. A subsequent appearance of the control
  86. sequence \ff will select this font. (The \: control sequence is no longer
  87. present in TeX82.) Font control sequence names must have length 2 or more.
  88.  
  89. * New input capabilities greatly expand the class of potential applications:
  90.  
  91. \openin n=filename, where the = is optional and where the stream number n
  92. is between 0 and 15, designates a text file that can be read
  93. concurrently with other input. If a file has already been opened for
  94. the same number n, it is closed first. If the file doesn't exist, no
  95. file will be opened.
  96.  
  97. \closein n simply closes stream n.
  98.  
  99. \ifeof n ... \else ... \fi tests if input stream n is either not open
  100. or has been fully read.
  101.  
  102. \read n to\cs and \global\read n to\cs: These are the important new commands.
  103. They define control sequence \cs to be the contents of the next line from
  104. input stream n, reading that line in the normal way: the current catcodes
  105. are used, spaces are ignored at the beginning of the line, a blank line
  106. comes through as \par, etc. If input stream n has not been opened, or if
  107. an opened file has been fully input, or if n is negative or greater than 15,
  108. a line is read from the terminal instead; the user is prompted "\cs=" in
  109. this case. The latter feature allows convenient interactive routines, e.g.,
  110.         \message{Please type your name:}
  111.         \read-1 to\myname
  112.         \message{Hello, \myname!}
  113.  
  114. * The previous commands \open and \send are renamed \openout and \write,
  115. to show their similarity to \openin and \read.
  116.  
  117. \closeout <number> will close a file so that your TeX program can eventually
  118. input it. (Previously you could only do this by, e.g., \openout 0=empty0.tmp,
  119. cluttering up the disk with an empty file.)
  120.  
  121. \write, \openout, and \closeout will be ignored if they occur within a \leaders
  122. construction. (Reason: The number of times a leader box occurs might be 0 or 1
  123. depending on floating-point rounding. This restriction keeps the language
  124. independent of floating point.)
  125.  
  126. * \ifx now allows comparison of any two tokens, not just control sequences.
  127. A non-control-sequence matches only another non-control-sequence that
  128. has the same catcode and represents the same character.
  129.  
  130. * New feature \expandafter t, where t is any token (usually a control sequence):
  131. If the token following t is a macro, it is expanded as if t were not there.
  132. Then t is put back in front of the result. For example,
  133.         \def\a{\x\y\z} \def\b#1\z{#1} \expandafter\b\a
  134. yields \b\x\y\z which yields \x\y. (It used to be possible to do this only
  135. with trickery/hackery.)
  136.  
  137. * \chpar has been abolished. In its place, all of the integer parameters have
  138. names instead of numbers. (Thus at last they become consistent with the
  139. dimension parameters \hsize, etc., and with the glue parameters \baselineskip,
  140. etc. My only excuse for bad design in the first place was that the integer
  141. parameters were afterthoughts, stuck in after TeX was first up and running; it
  142. was the easiest way to vary some of the originally fixed constants. I wanted to
  143. finish TeX in a year and get on to writing Volume 4! That is still my wish.)
  144.  
  145. Here are the names of the integer parameters:
  146. \tolerance      (formerly \chpar1=)     badness tolerance after hyphenation
  147. \pretolerance   (formerly \chpar15=)    badness tolerance before hyphenation
  148. \hyphenpenalty  (formerly \chpar2=)     hyphenation penalty
  149. \finalhyphendemerits                    penultimate line hyphenation demerits
  150.                 (formerly half of \chpar3=)
  151. \doublehyphendemerits                   double-hyphen demerits
  152.                 (formerly half of \chpar3=)
  153. \widowpenalty   (formerly \chpar4=)     widow line penalty
  154. \brokenpenalty  (formerly \chpar5=)     broken line at page end penalty
  155. \binoppenalty   (formerly \chpar6=)     math binary op break penalty
  156. \relpenalty     (formerly \chpar7=)     math relation break penalty
  157. \predisplaypenalty  (formerly \chpar9=) penalty for breaking before a display
  158. \mag            (formerly \chpar12=)    1000 x magnification ratio
  159. \adjdemerits    (formerly \chpar13=)    adjacent incompatibility demerits
  160. \looseness      (formerly \chpar14=)    change in paragraph length
  161. \uchyph         (formerly \chpar16=)    uppercase hyphenation
  162. \exhyphenpenalty  (formerly \chpar17=)  explicit hyphenation penalty
  163. \day            (new)                   initialized to current day of month
  164. \month          (new)                   initialized to current month of year
  165. \year           (new)                   initialized to current year
  166. \time           (new)                   initialized to minutes since midnight
  167. \interlinepenalty    (new)              see below
  168. \postdisplaypenalty  (new)              see below
  169. \displaywidowpenalty (new)              see below
  170.  
  171. The former \chpar10 (dump window) is no longer needed, since TeX82 has better
  172. ways to display token lists.  The former \chpar11 (\radsign) goes away in favor
  173. of the new \radical primitive.  The former \chpar18, \chpar19, \chpar20, once
  174. "reserved for extensions", are gone too, since it is now best for a TeX extender
  175. to give names to whatever new parameters are needed. Similarly, \x is gone.
  176.  
  177. * The \tracing parameter disappears, and its various components each have their
  178. own names.  They are as follows:
  179.  
  180. \showboxbreadth (nodes per level when a box is being exhibited)
  181. \showboxdepth (maximum level shown when a box is being exhibited)
  182. \pausing (if nonzero, lines from a file are displayed as they appear)
  183. \tracingonline (if nonzero, diagnostic info goes to terminal as well as to file)
  184. \tracingmacros (if nonzero, shows macros as they are being expanded)
  185. \tracingstats (if nonzero, shows memory usage when TeX has recorded it)
  186. \tracingoutput (if nonzero, shows boxes when they are shipped out)
  187. \tracinglostchars (if nonzero, shows chars dropped because they aren't in font)
  188. \hfuzz (a dimen parameter; hboxes are reported if more overfull than this)
  189. \vfuzz (a dimen parameter; vboxes are reported if more overfull than this)
  190. \hbadness (under/overfull hboxes exceeding this (integer) badness are reported)
  191. \vbadness (under/overfull vboxes exceeding this (integer) badness are reported)
  192.  
  193. * The new \tolerance and \pretolerance are devalued by a factor of 100 from the
  194. old \jpar and \jjpar.  In other words, the default is now \tolerance 200 and
  195. \pretolerance 200, so that it is a true "badness tolerance", i.e., the badness
  196. should not exceed 200. Any value of 10000 or more is equivalent to an infinite
  197. value, in which glue can stretch arbitrarily far.
  198.  
  199. * Furthermore, \codeval and \parval are eliminated. In their place is a much
  200. more powerful operator called \the. For example, what used to be "\codeval5" is
  201. now "\the\catcode5"; what used to be "\parval2" is now "\the\hyphenpenalty". You
  202. can even say "\the\hsize" to get the current \hsize as a dimension,
  203. "\the\baselineskip" to get the current \baselineskip as a glue value; and
  204. you can say things like "\vbox to \the\baselineskip", which makes a vbox
  205. whose height is the normal amount of baselineskip (exclusive of stretching
  206. and shrinking). When expanding macros, you can say "\the\font" to get the
  207. current font identifier (e.g., "\ff"), as well as "\the\ff" to get the
  208. corresponding font name, as well as "\the\output" and "\the\everypar".
  209. In the latter cases, macros inside the current output or everypar routines
  210. are not further expanded.
  211.  
  212. * Things like \count and \dimen and \skip should not appear except in the
  213. context of numbers, dimens, and glue; for example, you shouldn't say "\dimen 5"
  214. or even "\count 5" in the midst of a paragraph. But if you say "\the\count5",
  215. the paragraph will get the (signed decimal) value of the counter; if you say
  216. "\the\dimen10" you will get text like "3.14159pt"; and "\the\skip12" yields text
  217. like "-5.00000pt plus 3.40001fil".  In \xdef and \write, TeX82 will expand
  218. occurrences of \the, using the current values, but \count and \dimen and
  219. \skip will not be expanded. This gives you a little more control over what
  220. gets expanded.
  221.  
  222. * \thebox is changed to \lastbox (avoids confusion with \the).
  223.  
  224. * \minusthe is like \the, but gives the negative value.
  225.  
  226. * An array of 256 dimension values is introduced, called \dimen0 to \dimen255.
  227. Furthermore `3.5dm8' is a dimension equal to 3.5 times \dimen8.  These join
  228. \count0 to \count255 and \skip0 to \skip255, so we now have 256 of each basic
  229. quantity (instead of 10, as in TeX80).  This applies to \count, \dimen, \skip,
  230. \write, and \box.  PLAIN.TEX contains macros for allocating a new \count or
  231. \dimen, etc.
  232.  
  233. * mu-glue and ordinary glue are unmixable, since the rules are so much cleaner
  234. and clearer this way: There are 256 \muskip registers, which take glue whose
  235. units are mu (instead of pt, etc.).  It is now illegal to do things like
  236. \hskip\the\thinmskip or \mskip\the\baselineskip.
  237.  
  238. * Operations on \count, \dimen, \skip, and \muskip are extended, so that we now
  239. have a complete set:
  240.  
  241.         \setcount <digit> [=] <number>
  242.         \advcount <digit> by <number>
  243.         \multcount <digit> by <number>
  244.         \divcount <digit> by <number>
  245.  
  246.         \setdimen <digit> [=] <dimen>
  247.         \advdimen <digit> by <dimen>
  248.         \multdimen <digit> by <number>
  249.         \divdimen <digit> by <number>
  250.  
  251.         \setskip <digit> [=] <glue>
  252.         \advskip <digit> by <glue>
  253.         \multskip <digit> by <number>
  254.         \divskip <digit> by <number>
  255.  
  256.         \setmuskip <digit> [=] <mathglue>
  257.         \advmuskip <digit> by <mathglue>
  258.         \multmuskip <digit> by <number>
  259.         \divmuskip <digit> by <number>
  260.  
  261. Note that \specskip has changed its name to \setskip. The division operations
  262. truncate towards zero.  The = sign in \setcount, \setdimen, \setskip, \catcode,
  263. \font, \openout, \let, and in other similar things, is now optional.
  264. Furthermore an equals sign is optionally allowed now after \tolerance,
  265. \hsize, \baselineskip, \setbox (the new name for \save), etc.
  266.  
  267. * If you put \global in front of \def or \let or \catcode or \tolerance or
  268. \baselineskip or even \parshape or \hangindent or a font identifier, the
  269. definition will now be global. Otherwise the definition is local (except
  270. for \gdef and \xdef).  This is a change in the case of dimension
  271. parameters:  \varunit, \parindent, \lineskiplimit, \mathsurround,
  272. \maxdepth, \topbaseline, \hsize, \vsize; you should put \global in front
  273. of these to get the former behavior. You probably wanted the former
  274. behavior only when changing \hsize or \vsize in an \output routine.
  275.  
  276. * \edef is a local \xdef. Both \edef and \xdef can now take arguments like \def
  277. and \gdef.
  278.  
  279. * Two other modifiers can be placed in front of \def, \gdef, \edef and \xdef:
  280.         \long means that the arguments to the macro are allowed to contain
  281.                 \par tokens; formerly this was always allowed, but now it
  282.                 is permitted only for "long" macros. Otherwise TeX will now
  283.                 stop when it sees \par going into an argument, presuming
  284.                 that a right brace was forgotten. This detects one of the
  285.                 most frequent errors made by TeX users, before it propagates
  286.                 to overflow the memory.
  287.         \outer means that the macro being defined is not allowed to appear
  288.                 subsequently either in an argument or in the right-hand side
  289.                 of a definition or write text, or in the preamble of an
  290.                 alignment. In other words, the macro should appear only at
  291.                 "quiet" times. This is another way to catch missing braces
  292.                 before too much damage is done. It used to be applied at the
  293.                 end of  every page, but most TeX users don't use a page-oriented
  294.                 editor like E; therefore TeX82 does not treat file pages as
  295.                 an integral part of its control structure.
  296.  
  297. * \begingroup and \endgroup provide an alternate way to enter and leave groups
  298. for locally defined values. A \begingroup will not match a }, nor will { match
  299. \endgroup; the former gives the message "Missing \endgroup inserted" when the }
  300. occurs, and the latter inserts a "missing" }. Note that you can introduce
  301. \begingroup in one macro and \endgroup in another.
  302.  
  303. * If you say \message{text}, the terminal will display " text" immediately.  For
  304. example, the new version of PLAIN.TEX contains message statements so that
  305. when INITEX inputs the file your screen looks something like this:
  306.         (PLAIN.TEX preloading macros, fonts, codes, hyphenation)
  307. instead of "(plain.tex 1 2 3 4 5 6)". (Note that you don't say \input basic any
  308. more, and PLAIN.TEX is already preloaded when you run TeX, as explained below.)
  309.  
  310. Here's an example macro that displays names of sections when you get to them in
  311. a paper you are TeXing:
  312.   \outer\def\section#1{\vfill\eject\message{#1}\centerline{\bf#1}}
  313.  
  314. * You can also say \errmessage{text}, which causes a TeX error message like
  315.         ! text.
  316.  
  317. * \catcode<n> replaces \chcode <n>. \mathcode<n> replaces \chcode <n+128>.
  318.  
  319. * A new catcode value 14 denotes a character that is better for comments than
  320. the old code 5. A character of code 14 denotes end of the current line (i.e.,
  321. ignore the remainder of that line), without inserting a blank space, and without
  322. considering that line to be all blank.  Thus, if % is assigned type 14, you can
  323. have lines that are completely comments by starting them with %, without having
  324. this line come out as \par; and you can also end a line with % without having a
  325. blank space inserted there.
  326.  
  327. * Another new catcode value, 15, denotes an invalid character. When such a
  328. character is input, TeX82 issues an error message.
  329.  
  330. * Here's something that was NOT put into TeX82: It wouldn't be hard to make TeX
  331. understand \escape to mean 0, \opengroup to mean 1, ..., \active to mean 13,
  332. \comment to mean 14, and \invalid to mean 15; then you could say, e.g.,
  333. \catcode'14=\active in the example above. But it seems wrong to make
  334. \catcode too easy, since that will only encourage more people to fiddle
  335. with the \catcode table. Let's leave this a black art, to be resorted to
  336. only with reluctance in times of emergency.
  337.  
  338. * You CAN do certain things now in horizontal mode, e.g., \vfill; TeX82 will
  339. silently insert the \par you forgot.
  340.  
  341. * \discretionary{#1}{#2}{#3} makes discretionary characters other than hyphens.
  342. It means the text should either contain #3 without a break, or else it should
  343. contain #1, then a break, and then #2. For example, \- is equivalent to
  344. \discretionary{-}{}{}. The parameters #1, #2, and #3 may not contain anything
  345. but letters and otherchars (not spaces or penalties, etc.); they need not all be
  346. in the same font, and TeX will insert ligatures and kerns within them if
  347. necessary. For example, the correct way to specify the hyphenation of
  348. "difficult" is "di\discretionary{f-}{fi}{ffi}\-cult". In German, the correct way
  349. to specify hyphenation of "backen" is "ba\discretionary{k-}{k}{ck}en";
  350. presumably if we were doing a lot of these we would define a \ck macro so that
  351. one could type "ba\ck en" or "ba{\ck}en".  The third part of a \discretionary
  352. must be empty, in math mode.
  353.  
  354. * The internal character set used by TeX82 is the same regardless of the
  355. external character set. There is no longer a difference like "\catcode'176" for
  356. right brace that applies only at SAIL! Right braces and underlines and tildes
  357. and notequals and a few others have been a source of problems that have now gone
  358. away. Furthermore there is now a way to input an ascii control character to any
  359. version of TeX82 by typing, e.g., ^^A.
  360.  
  361. TeX82 assumes that all of the standard ascii characters, shown in positions 040
  362. through 176 below, are available; these characters are always converted to their
  363. standard ascii codes. For example, a TeX user who types A is asking for
  364. character 65 of the current font, even though the A might have entered the
  365. computer in EBCDIC or some other code. Non-standard-ascii characters might also
  366. be readable on some implementations of TeX. In such cases they should have the
  367. significance stated below, for best results; and all characters that cannot be
  368. converted to a compatible TeX code should be converted to 177.
  369.         ascii   TeX     description     catcode mathcode (plain TeX)
  370.         000     ^^@     null            ignore  bin401
  371.         001     ^^A     downarrow       submark rel443
  372.         002     ^^B     alpha           other   ord213
  373.         003     ^^C     beta            other   ord214
  374.         004     ^^D     and             other   bin536
  375.         005     ^^E     not             other   ord472
  376.         006     ^^F     epsilon         other   ord217
  377.         007     ^^G     pi              other   ord231
  378.         010     ^^H     backspace,lambda ignore ord225
  379.         011     ^^I     tab,gamma       space   ord215
  380.         012     ^^J     linefeed,delta  ignore  ord216
  381.         013     ^^K     uparrow         supmark rel442
  382.         014     ^^L     formfeed,+/-    endline bin406
  383.         015     ^^M     carriage-return endline bin410
  384.         016     ^^N     infinity        other   ord461
  385.         017     ^^O     partial         other   ord245
  386.         020     ^^P     subset          other   rel432
  387.         021     ^^Q     superset        other   rel433
  388.         022     ^^R     intersection    other   bin534
  389.         023     ^^S     union           other   bin533
  390.         024     ^^T     for-all         other   ord470
  391.         025     ^^U     there-exists    other   ord471
  392.         026     ^^V     circle-times    other   bin412
  393.         027     ^^W     leftrightarrow  other   rel444
  394.         030     ^^X     leftarrow       other   rel440
  395.         031     ^^Y     rightarrow      other   rel441
  396.         032     ^^Z     notequal        other   rel434
  397.         033     ^^[     escape,diamond  action  bin567
  398.         034     ^^\     less-or-equal   other   rel424
  399.         035     ^^]     greater-or-equal other  rel425
  400.         036     ^^^     equivalence     other   rel421
  401.         037     ^^_    or              other   bin537
  402.         040             space           space   ord464
  403.         041     !       exclamation     other   close041
  404.         042     "       double-quote    other   active ^{\prime\prime}
  405.         043     #       hashmark        param   ord561
  406.         044     $       dollar-sign     math    ord577
  407.         045     %       percent-sign    comment ord045
  408.         046     &       ampersand       align   ord046
  409.         047     '       apostrophe      other   active ^\prime
  410.         050     (       left-parenthesis other  open050
  411.         051     )       right-parenthesis other close051
  412.         052     *       asterisk        other   ord052
  413.         053     +       plus-sign       other   bin053
  414.         054     ,       comma           other   punct054
  415.         055     -       hyphen,minus-sign other bin400
  416.         056     .       period          other   ord056
  417.         057     /       slash           other   ord057
  418.         060     0       zero            other   var060
  419.            . . .
  420.         071     9       nine            other   var071
  421.         072     :       colon           other   rel072
  422.         073     ;       semicolon       other   punct073
  423.         074     <       less-than-sign  other   rel074
  424.         075     =       equal-sign      other   rel075
  425.         076     >       greater-than-sign other rel076
  426.         077     ?       question-mark   other   close077
  427.         100     @       at-sign         other   ord574
  428.         101     A       uppercase-A     letter  var301
  429.            . . .
  430.         132     Z       uppercase-Z     letter  var332
  431.         133     [       left-bracket    other   open133
  432.         134     \       backslash       control bin404
  433.         135     ]       right-bracket   other   close135
  434.         136     ^       caret           supmark ord017
  435.         137     _      underline       submark ord465
  436.         140     `       reverse-apostrophe other open140
  437.         141     a       lowercase-a     letter  var341
  438.            . . .
  439.         172     z       lowercase-z     letter  var372
  440.         173     {       left-brace      open    open546
  441.         174     |       vertical-line   other   ord552
  442.         175     }       right-brace     close   close547
  443.         176     ~      tilde           other   rel430
  444.         177     ^^?     invalid         invalid ord573
  445.  
  446. As before, the mathcodes (which replace Appendix F8 of the old TeX manual)
  447. are relevant only when the catcode is letter or other. (See below for the
  448. new catcode values.) Two possibilities are given for codes 010, 011, 012,
  449. 014, 033, 055; at most one of these should be chosen, and if both are
  450. present on some system keyboards the other should probably be disallowed
  451. for TeX input (mapped into 177). However, since a user can change any
  452. catcode and any math code, strict conformity with these interpretations
  453. isn't absolutely necessary. To convert a file into a format that all TeXes
  454. can read, one should change null into ^^@, downarrow into ^^A, and so on.
  455. If a character set contains uparrow but not caret (e.g., the SAIL system
  456. falls into this category), the uparrow should be considered an ascii
  457. caret; code 013 will be used only if both uparrow and caret are present,
  458. as they are at MIT.  Incidentally, this internal coding scheme is based on
  459. a scheme used at MIT, since the MIT code is faithful to ascii while
  460. allowing additional visible characters that are extremely convenient.
  461.  
  462. An appearance of ^^A is equivalent to an appearance of ascii code 001, if the
  463. current catcode of ^ is supmark. In particular, if somebody in a foreign country
  464. with more than 26 letters in the local alphabet wants to make \catcode ^^A =
  465. letter, then control sequences like \a^^A^^Ab (a four letter word) are
  466. permissible.
  467.  
  468. TeX82 puts 015 (ascii carriage-return) at the end of each line, except for the
  469. lines that are inserted with "i" after error messages. If the final character of
  470. the line is currently catcoded to be an escape character (e.g., if you end an
  471. error-insertion with \, or if you do \catcode'15=0), the result is equivalent
  472. to \csname\endcsname (control sequence of length zero).
  473.  
  474. Of course, users are expected to type \ne instead of ^^Z if their system's
  475. character set doesn't contain a not-equal sign; TeX82 recognizes ^^Z as ascii
  476. 032 primarily to make it possible for straightforward translation of TeX files
  477. from one system so that they will work on another.
  478.  
  479. Some files contain ascii 014 (form-feed) characters as page marks. Such
  480. characters are ordinarily treated like carriage-returns, since the initial
  481. catcode for 014 is carret. In order to get TeX82 to do the error checking at the
  482. end of a page, as the old TeX did, you can say
  483.         \catcode'14=13 \outer\def^^L{\par}
  484.  
  485. * Note that the backslash character is now predefined as an escape character
  486. when TeX82 begins. The old idea about letting the user's first nonblank
  487. character be the escape has been abandoned. Furthermore TEXPRE has been replaced
  488. by a version of TeX called INITEX that allows an entire macro package to be
  489. preloaded; this macro package can define its own catcodes and mathcodes. The
  490. normal version of TeX already has "PLAIN.TEX" preloaded; the normal version of
  491. AmSTeX already has the AmSTeX macros and fonts preloaded.
  492.  
  493. The new rule for starting TeX is this:  When you're running INITEX or a version
  494. of TeX that has a preloaded format, you can request format file f.fmt by typing
  495. `&f' after the ** prompt. When you're running VIRTEX, format file plain.fmt will
  496. be loaded unless you type `&somenonplainformatname' after the ** prompt.  Thus,
  497. for example, the following ways of starting TeX are equivalent at SAIL and
  498. similar sites:
  499.         tex paper
  500.                         r tex;paper
  501.                                         r tex
  502.                                         ** paper
  503.                                                         r tex
  504.                                                         **\input paper
  505. (The asterisks here are TeX's prompt character. On TOPS-20 what used to be
  506. "@tex paper/", indicating batch mode, is now "@tex \batchmode\input paper".)
  507.  
  508. * There are four new primitives \batchmode, \nonstopmode, \scrollmode,
  509. \errorstopmode that represent increasing amounts of interaction. \batchmode and
  510. \nonstopmode will never stop for any reason; \batchmode omits printing anything
  511. on the terminal (but the .log file gets everything, as usual).  These nonstop
  512. options are intended for overnight batch processing.  \scrollmode doesn't stop
  513. for error messages, but it does stop if files can't be found, or if \pausing is
  514. nonzero. \errorstopmode is the default. If you aren't in \errorstopmode, your
  515. .log file will contain "help" messages for all of your errors. These modes are
  516. global (they don't revert at end of group).  They can be set in a format file;
  517. thus you can have a format that implies batch processing. But you could override
  518. that, e.g. by running "batchtex \errorstopmode \input paper". (This example
  519. assumes that batchtex is a program representing "virtex&batch", i.e., a virgin
  520. TeX with batch.fmt loaded and then the core image saved.)
  521.  
  522. * \dump will save TeX's current memory contents.  \dump is essentially like \end
  523. (it's the last thing you do with INITEX), and you don't specify a file name. If
  524. your input was named foo, your output file will be named foo.fmt. Such files are
  525. now called format files.  This is allowed in INITEX only, and only at very quiet
  526. times (i.e., at group level 0 in vertical mode with nothing on the current page,
  527. etc.).  The file name will be printed later when these memory contents are
  528. loaded in a production version of TeX; for example, if you say "\dump" on
  529. March 1, 1982, the TeX that uses the dumped file might begin with the line
  530.         This is TeX, Version 1 (format=plain 82.3.1)
  531.  
  532. * Actually the program name TeX now stands only for versions of TeX82 that have
  533. PLAIN.TEX preloaded. Other preloaded versions (e.g. AMSTEX) will usually exist
  534. too. If your operating system does not allow a program to start with its memory
  535. preloaded, you will have to call a "virgin TeX" program VIRTEX that first wants
  536. to see the name of a format-dump file (e.g., PLAIN or AMSTEX).  In this case a
  537. typical calling sequence might be "@virtex &amstex paper".   If no format
  538. is given, "&plain" is assumed. If your operating system is nice enough to
  539. allow preloaded programs, a typical way to create the program TeX would be
  540. to say "@virtex &plain" followed by something like "control-C" and "save tex".
  541.  
  542.  
  543. * \indent takes you from vertical mode to horizontal mode and indents the
  544. paragraph; this can be used if the first item in the paragraph is in an
  545. \hbox or \vbox. You can also use \indent in horizontal mode to stand for
  546. "\hbox to\the\parindent{}".
  547.  
  548. * If you end the parameter part of a definition with an additional #, the
  549. argument-matching process will terminate on the next left brace.  For example,
  550. in
  551.         \def\chop to #1#{\chopp{#1}}
  552. the call "\chop to 2in{x}" will expand to "\chopp{2in}{x}". The definition
  553.         \def\mac#{why}
  554. will subsequently issue an error message if "\mac" is not followed by "{".
  555.  
  556. * The "texinfo" that is given with each font (see Appendix F of the METAFONT
  557. manual) can now be changed by a TeX user program; there was no way to do this
  558. before except by making a new TFM file. Say
  559.         \texinfo <font><parameternumber>=<dimen>
  560. For example, \texinfo\ff3=4pt sets the stretch component of spacing to 4pt in
  561. font \ff. (Parameter 1, the "slant", is unitless but you should give its
  562. value in units of points.) You can use this feature to adjust math-mode
  563. positioning of subscripts, etc., by changing the parameters in mathsy and
  564. mathex fonts. Note that texinfo is global, it does not get reset at the
  565. end of a group. You can also say \the\texinfo<font><parameternumber>.
  566.  
  567. * New dimension parameters \hfuzz and \vfuzz specify the tolerance for printing
  568. a diagnostic message about overfull boxes. If the box is overfull by this amount
  569. or less, no message is printed. Default is ".1pt", which was the old TeX
  570. standard. If you say \hfuzz 8000pt, you probably won't see any overfull boxes.
  571. If you say \hfuzz 0pt, you will see all of them, including a few that you didn't
  572. know about last year.
  573.  
  574. * Another new dimension parameter \overfullrule specifies the width of a rule
  575. that is added at the right end of overfull hboxes. This rule has the height and
  576. depth of the box. If \overfullrule is zero or negative, or if the amount of
  577. overfullness does not exceed \hfuzz, no rule will appear.  Default is 5pt, which
  578. gives a big black mark to help you spot overfull boxes.
  579.  
  580. * The "overfull box" warning messages will be given in a new form that simply
  581. gives the characters in the box; for example,
  582.         Overfull \hbox, 3.3326 points too wide (in paragraph of lines 210--216):
  583.         \ff This is the text of a line that was over-full for some rea-son.
  584. Discretionary hyphens are shown as real hyphens, so that you can see what
  585. hyphenation TeX was trying.  The error-transcript file gets both this message
  586. and an old-style description of the overfull box in detailed diagnostic dump
  587. format.
  588.  
  589. * Another new control sequence, \relax, does nothing at all. Thus, if you want
  590. to disable the action of a control sequence, you can \let it be \relax.
  591.  
  592. * Up to 256 fonts may be used, and each font may contain up to 256 characters.
  593. (Characters numbered 128 to 255 can be accessed either via ligatures or
  594. charlists or with the \char command.)
  595.  
  596. * \leftskip and \rightskip specify glue to be placed at the left and right of
  597. each line of a paragraph. This provides better ways to do ragged right setting,
  598. and it makes changes to \hsize less necessary.
  599.  
  600. * \lastskip gives the value of the previous item in the current horizontal or
  601. vertical list, if that item was glue, otherwise it yields the value 0pt. Thus,
  602. to get the effect of \unskip in vertical mode, say
  603. "\penalty100000\vskip\minusthe\lastskip".
  604. You can also do things like "\ifdim\the\lastskip > 5pt ... \else ... \fi",
  605. so that one macro can make decisions about spacing based on what has gone
  606. before.  (This finally solves the long-standing problem about spacing
  607. after theorems that end with a displayed equation.) Note that
  608. \the\lastskip is permitted, except in \write statements.
  609.  
  610. * \sqrt signs in TeX82 are positioned differently in their boxes:  The baseline
  611. now comes exactly at the bottom of the place where the vinculum (i.e., the rule
  612. over the operand of \sqrt) is to be joined.  This means that no rounding errors
  613. will be possible and perfect alignment will be obtained at all resolutions.
  614. Pre-82 versions of TeX will still work (subject to rounding) if the height of
  615. the box is the thickness of the rule.
  616.  
  617. * The error transcript files are no longer called "errors.tmp". Your output file
  618. and transcript file will be "paper.dvi" and "paper.log" if your first line of
  619. TeX input specifies \input paper. The default name "texput" is used whenever no
  620. other appropriate name has occurred before TeX reads line two of its input. (TeX
  621. can't wait any longer, since line one has to be put into the transcript file,
  622. and the transcript file has to have a name before it gets information.)
  623.  
  624. * \hyphenation{word list} can be used to override TeX's hyphenation algorithm;
  625. for example, to specify hyphenation of the words "hyphenation" and
  626. "exceptions" one can write
  627.         \hyphenation{hy-phen-a-tion ex-cep-tions}
  628. A new hyphenation algorithm devised by Frank Liang is used in TeX82; this one
  629. extends much more readily to other languages. Words containing ligatures can now
  630. be hyphenated automatically, even difficult words like "difficult".
  631.  
  632. * If two fonts are specified with the same name and point size, only one will be
  633. loaded.
  634.  
  635. * \sfcode <char number> is the spacefactor code for that character, times 1000.
  636. For example, the spacefactor code for period and question mark is normally 3000,
  637. for comma 1250, for right parenthesis 0 (meaning do not change the space
  638. factor), and for most characters it is 1000. In TeX82, you also say
  639. "\spacefactor 1234" instead of "\spacefactor 1.234".
  640.  
  641. * TeX82 has a new "help" facility available on error messages. If you type "h"
  642. after an error, you will (usually) get further explanation of what the error
  643. means, together with suggestions about how to proceed.
  644.  
  645. * \^^\ and \^^] have gone away, to the delight of people who don't have nice
  646. ways to type ascii control characters. Instead, \nonscript in math mode precedes
  647. a space of any other type, making that space zero in subscript styles. Thus, the
  648. conditional thin space is now "\nonscript\mskip\the\thinmuskip", and conditional
  649. negative thin space is "\nonscript\mskip\minusthe\thinmuskip".
  650.  
  651. * \thinmuskip, \medmuskip, \thickmuskip are now definable like other glue
  652. parameters such as \baselineskip. The units should be in mu. For example, one of
  653. the defaults is \thickmuskip 5mu plus 5mu.  The old "mathspace" parameter in
  654. symbol fonts (see METAFONT manual p99) is no longer used.
  655.  
  656. * There's a new way to get up to 4096 more math symbols in all three sizes, by
  657. defining font families 0 to 15. For example, suppose that fonts \fA, \fD, and
  658. \fF are Fraktur alphabets in 10pt, 7pt, and 5pt sizes. Then you can say
  659.         \textfont 5=\fA \scriptfont 5=\fD \scriptscriptfont 5=\fF
  660. which is something like the code "\mathrm adf" in the old basic.tex. Now if you
  661. say "\fam5" in math mode, you get characters from font \fA, \fD, or \fF,
  662. depending on the size. For example, "{\fam5 B_b}" would give Fraktur B in
  663. 10pt with a subscript Fraktur b in 7pt. The rule is that a family
  664. specification overrides the normal family for symbols of class var (see below).
  665.  
  666. Note that we can now say \def\rm{\fam0\ff} together with
  667.         \textfont 0=\ff \scriptfont 0=\fg \scriptscriptfont 0=\fh
  668. and then it's possible to say, e.g., "\def\max{\mathop{\rm max}}" instead
  669. of resorting to "{\char`m \char`a \char`x}" in order to achieve size-switching.
  670. This extension also makes ligatures and kerning available in math mode.
  671.  
  672. * The use of certain families is predefined.  Family 2 specifies the `mathsy'
  673. fonts used for symbols; family 3 specifies the `mathex' fonts used for large
  674. delimiters; and the other 14 families can be used in any desired fashion.
  675. Instead of `\mathsy uxz' one now says
  676.         \textfont 2=\u \scriptfont 2=\x \scriptscriptfont 2=\z
  677. and these assignments are local (they go away at the end of a containing group).
  678. You must have \textfont2, \scriptfont2, \scriptscriptfont2, \textfont3,
  679. \scriptfont3, and \scriptscriptfont3 defined before using math mode, since the
  680. parameters of these fonts contain the values TeX needs for math spacing.
  681. (\scriptfont3 and \scriptscriptfont3 are now supposed to be math extension
  682. fonts, as well as \textfont3, because TeX82 will use smaller extension-type
  683. features in script and scriptscript styles; for example, the default rule
  684. thickness in a subscript is a parameter to \scriptfont3, while TeX80 had only
  685. one extension font for all three sizes.)
  686.  
  687. * The \mathcode now has a 15-bit number as its value. The first three bits
  688. specify ord, op, bin, rel, open, close, punct, and var (where var is like ord
  689. but it subsitutes the "current" family for the stated one).  The other twelve
  690. bits specify a "math character", with four bits for the family and eight for the
  691. character. For example, character '100 in family 5 is '2500; of course, this
  692. reads a little better in hexadecimal:  character "40 in family 5 is "540.
  693.  
  694. You can say \mathchar followed by such a 15-bit code, to get the equivalent of
  695. typing a character with that math code. Thus, one can now say, e.g.,
  696.         \def\cdot{\mathchar '10001 }
  697. instead of \def\cdot{\mathop{\char1}} as formerly. The control sequence \char
  698. is no longer allowed to take values greater than 255.
  699.  
  700. * If the first three bits of a mathcode are 7 (case "var"), it's the same as 0
  701. except that the current value of integer parameter \fam replaces the
  702. family specification (if it is between 0 and 15). The current family is
  703. set to -1 whenever math mode is entered.
  704.  
  705. * A \mathcode can also be '100000; this causes the corresponding character to
  706. behave as if it had catcode 13 (if it is a letter or otherchar).
  707. For example, plain TeX defines the mathcode of ' to be '100000,
  708. and control sequence ' is defined to be ^\prime,
  709. so that you can say f'(x) instead of f^\prime(x). In this way
  710. you can have characters that are active only in math mode. (Furthermore,
  711. an octal constant like '77777 will still be acceptable in math mode.)
  712.  
  713. * New primitive \mathchardef will save lots of memory if you have lots of
  714. control sequences for math things like \alpha, etc.:
  715.         \mathchardef\cs[=]<fifteen bit number>
  716. will have the effect of
  717.         \def\cs{\mathchar <fifteen bit number> }
  718. and it will use none of TeX's memsize. (By contrast,
  719.         \def\cs{\mathchar "1234 }
  720. takes up 9 words of memory!)
  721.  
  722. * The \radsign parameter goes away. Instead, one says \radical followed by a
  723. delimiter code. Delimiter codes may be used also after the control sequence
  724. `\delimiter' in connection with \left and \right and \atopwithdelims.
  725.  
  726. A delimiter code is a somewhat esoteric 24-bit number. The first twelve bits
  727. specify a `small' character, and the last twelve bits specify a `large' one.
  728. When TeX chooses a delimiter, it searches in the following way until finding the
  729. first one large enough: First it looks at the `small' character in the current
  730. size of the family, then (if the current size isn't text size) it looks at the
  731. small character in the next larger size, and so on until coming to text size. If
  732. a suitable delimiter has still not been found, the same search is carried out
  733. starting at the `large' character. If any of the characters looked at is part of
  734. a "charlist", the list is searched before moving on. If the small or large
  735. character is zero, it is ignored; thus, you can't use character 0 in family 0 as
  736. a delimiter.
  737.  
  738. For example, \sqrt is equivalent to \radical '11601560 in the Computer Modern
  739. fonts; the 1160 specifies \fam2\char'160, and the 1560 specifies \fam3\char'160.
  740. Since '160="70, we can also write this as \radical "270370.
  741.  
  742. If \delimiter <delimiter code> appears in a formula in some place not
  743. controlled by \left or \right or \atopwithdelims, it is actually a 27-bit
  744. code. The least significant 12 bits are ignored, and the leading 15 bits
  745. are used like a \mathchar (thus, they specify a category as well as a
  746. family and character). The reason is that one can now say, e.g.,
  747.         \def\lfloor{\delimiter '411421404 }
  748. so that one can say both \left\lfloor and simply \lfloor.
  749.  
  750. A \delcode is also given for letters; \left and \right and \atopwithdelims will
  751. use this code as a delimiter code if they are followed by an "otherchar".  For
  752. example, the Computer Modern fonts use \delcode`(='501400, assuming that family
  753. 0 contains the ordinary roman alphabets.  Initially, \delcode is negative for
  754. all characters; this denotes an invalid delimiter.
  755.  
  756. All this bit hackery is, of course, unfriendly looking, but the goal is to make
  757. it possible for macro packages to define the friendly codes without taking up
  758. much memory space inside of TeX. All of the TeX control sequences that used to
  759. be predefined for Computer Modern are now unbundled so that arbitrary encodings
  760. can be used. One of the embarrassing limitations of TeX80 was that it could
  761. handle delimiters only between '142 and '153 in the symbols font, and it
  762. insisted that these `small' delimiters had corresponding `large' ones in
  763. positions '004--'015 of the mathex font!
  764.  
  765. * The spacing in math formulas is unbundled too; there are three parameters
  766. \thinmuskip, \medmuskip, \thickmuskip to specify the spacing in formulas like
  767. $x\log x$, $x+x$, and $x=x$, respectively. One defines these using "mu" units,
  768. e.g. `\medmuskip = 4mu plus 2mu'. The control sequences `\,' `\>' and `\;' in
  769. math mode yield spaces of these three varieties. (These are now defined in
  770. PLAIN, not TeX primitives. The previous meaning of \> is now rendered
  771. `\nonscript\>'.)
  772.  
  773. The following example shows a feature that is NOT allowed:
  774. $a \save1\hbox to 18mu{}
  775.         \ifdim 1wd1=10pt{\gdef\x{\over b} \else{\def\x{}}
  776.         \x$
  777. Whoever wrote this was trying to be clever and discover whether TeX was
  778. in \textstyle. But the program is self-contradictory, because if the "a" is in
  779. 10pt text style the formula changes itself to $a\over b$ where the "a" is in
  780. script style, so the formula changes itself to $a$ where the "a" is in text
  781. style, so... Constructions like this show why TeX does not allow variable
  782. dimensions like mu except in very restricted ways like \mskip.
  783.  
  784. * New dimension parameters
  785.         \scriptspace  {this amount is placed at the right of all subscripts
  786.                         and superscripts; TeX80 used about .45pt always}
  787.         \nulldelimiterspace {this amount is used before and after all fractions
  788.                         defined by \atop, \over, \above, and for all
  789.                         "." delimiters}
  790.         \delimitershortfall {see the next parameter}
  791.  
  792. * New integer parameter \delimiterfactor. When TeX computes the size of
  793. \left and \right delimiters, it computes delta1=twice the maximum distance
  794. of the enclosed formula from the "axis". (The axis is where the fraction
  795. line would go.)  Let delta2=delta1*(delimiterfactor/1000) and
  796. delta3=delta1-delimitershortfall.  The delimiters will be as small as
  797. possible provided that their height+depth exceeds both delta2 and delta3.
  798. (TeX80 took delimiterfactor=900 and delimitershortfall=1ex; TeX82 lets the
  799. user twiddle with these magic numbers.)
  800.  
  801. * When unscripted letters occur in math mode, they now are adjusted for
  802. ligatures and kerns. This means, for example, that "df" will be spaced better,
  803. once appropriate kerning information has been added to the math italic fonts.
  804. The (new) rules for spacing are this: If there's no kerning specified, add the
  805. italic correction to every symbol in math mode; otherwise use the kern (without
  806. the italic correction). However, a subscript is moved left by the amount of
  807. italic correction. In formulas like $P_2^2$, the 2's will no longer be directly
  808. above each other (the sub-2 will be to the left of the sup-2 by the amount of
  809. the italic correction).  TeX80 put them above each other, thereby following a
  810. long-standing convention (cf. Oxford book by Chaundy et al.), but this usually
  811. turned out to be undesirable, so people started to write $P^2_{\!2}$ all the
  812. time.  If anybody really wants it the old way, they can get it by
  813. $\hbox{$P$}^2_2$.
  814.  
  815. * "\comb" is changed to "\atopwithdelims". There's also "\overwithdelims" and
  816. "\abovewithdelims".
  817. For example, {1\overwithdelims[]2} is sort of like \left[1\over2\right].
  818. And "\abovewithdelims.." is equivalent to "\above".
  819.  
  820. * The maximum penalty has been raised from 1000 to 10000; thus, "\penalty 1000"
  821. no longer absolutely prohibits a break, but "\penalty 10000" does.  This number
  822. 10000 is being used elsewhere in TeX82 also: For example, \tolerance or
  823. \pretolerance of 10000 is equivalent to saying "use all possible line breaks,
  824. regardless of how much stretching is necessary."  A \penalty of -10000 (or less)
  825. is equivalent to the old \eject in vertical mode, and to the old \linebreak in
  826. horizontal mode. These are no longer primitives of TeX82.
  827.  
  828. * The \pagebreak feature is also eliminated, in favor of a much more general
  829. feature. You can say \vadjust{vertical list} in the midst of any paragraph, and
  830. whatever is in the specified vertical list will be placed immediately following
  831. the box for its line when the paragraph has been made. For example, \pagebreak
  832. is now written \vadjust{\penalty-10000}. You can use this feature to do things
  833. like insert extra space between lines of a paragraph, something like \noalign
  834. does for alignments.
  835.  
  836. * \ifvoid n tests if \box n is not present. All boxes are initially void;
  837. a null box (made e.g. by \hbox{}) is empty but nonvoid. A box becomes void
  838. after it is used.
  839.  
  840. * \topbaseline has changed to \topskip; thus glue is allowed at the top of a
  841. page. This makes it easy to "bottom justify", for example.  (The old \topskip
  842. and \botskip are no longer used.)
  843.  
  844. * \vtop is now allowed in any mode, just like \vbox.
  845.  
  846. * \special{keyword arg} is a general extension feature. The keywords are system
  847. dependent, but TeX copies "keyword arg" into the DVI file so that any device
  848. driver that knows your keywords will do the right thing with them. Users should
  849. get together if they want to standardize on various keywords. Examples:
  850. \special{halftone fig22} could mean "insert a halftone from file fig22, with its
  851. reference point at the current reference point"; \special{leftend 2} and a later
  852. appearance of \special{rightend 2} could mean "draw a straight line from
  853. the left reference point to the right one" (the "2" is an identifier to
  854. distinguish this line from another one); \special{message Foo} could mean
  855. "display `Foo' on the console of the printing device"; and so on.
  856. Semantically, \special acts like a box of height, width, and depth zero,
  857. as far as TeX is concerned; the argument in braces is sent to the DVI file
  858. where it is associated with the current reference point.
  859. The length of "keyword arg" must be at most 255 characters.
  860.  
  861. * \ragged is no longer implemented, since \rightskip does ragged right setting
  862. so much better.
  863.  
  864. * \ifcase <number> case0 \or case1 \or case2 \else remaining cases \fi
  865. illustrates a new way to choose between more than two alternatives without
  866. too many nested brackets. Any number of cases can be given (but TeX has
  867. to scan by them each time, so it's best to define them as control sequences
  868. if they are long). The \else is optional.
  869.  
  870. * Major changes have been made to the \output conventions, so that it will be
  871. easier to produce balanced columns and various other things.  The old ideas of
  872. \topinsert, \botinsert, \topsep, \botsep are eliminated!
  873.  
  874. In their place one says \insert n, where n is a box number, e.g. "\insert 250".
  875. Different numbers correspond to different classes of insertions; for example,
  876. one might want to have figures as well as footnotes inserted at the bottom of
  877. pages, and TeX80 used to use the same treatment for both. Under the new
  878. conventions, all \insert 250's that go on a page will appear in \box 250 when
  879. the \output routine starts.
  880.  
  881. The old idea of "\page" is gone too, and the meaning of \output has changed, so
  882. read carefully: The contents of an accumulated page, exclusive of inserts, is
  883. placed into \box 255, so that the output routine can place this material
  884. together in whatever way it wants. (\insert 255 is not legal.)  A new TeX
  885. primitive called \shipout, followed by a box specification (e.g.,
  886. "\shipout\vbox{\box255\box250}") is what actually produces output.  Note that
  887. \ifvoid 250 can be used to test whether any \insert 250's have been gathered
  888. for a page.  The \shipout command can be used anywhere, not just in \output.
  889. Incidentally, \shipout prevents the old anomalies about the values of \counts
  890. being different from what people thought they would be when \writing
  891. table-of-contents or index data to a file. The default \output routine in TeX82,
  892. if none is specified, is "\output{\shipout\box255}".
  893.  
  894. Another new primitive, \vsplit, is handy for multi-column input.  The command
  895. "\setbox 2=\vsplit 250 to 100pt" will, for example, make \box2 a box whose
  896. height is 100pt, by extracting 100pt worth of material out of \box250. The depth
  897. of \box2 will be at most \splitmaxdepth (using the rules that TeX used for
  898. \page); \vsplit extracts the optimum initial segment of \box250, in the sense
  899. that badness+penalty is minimized and the segment is as long as possible subject
  900. to this condition. After \vsplit has acted, \box250 will contain the residual,
  901. as if a page break had occurred; thus, glue and penalties will be eliminated
  902. following the break, and the first box or rule (if any) will then be preceded by
  903. sufficient glue to position its top baseline (based on \splittopskip).
  904.  
  905. The main idea of \vsplit is to make it easier for an \output routine to produce
  906. multiple column format. For example, if \box255 is 300pt high, one can get
  907. triple columns by
  908.         \setbox 1=\vsplit 255 to 100pt
  909.         \setbox 2=\vsplit 255 to 100pt
  910.         \setbox 3=\vsplit 255 to 100pt
  911. (Actually it is safer to use slightly less than 100pt here, but the exact
  912. measurements depend on the top baseline and other things.) The remaining
  913. material in box 255, if any, can be put back onto the following page, as we will
  914. see momentarily; and boxes 1,2,3 can be positioned as desired before they are
  915. shipped out.
  916.  
  917. The \vsplit routine also looks at \marks in the contained box. It sets
  918. \splitfirstmark and \splitbotmark to the topmost and bottommost contained marks;
  919. otherwise it sets these to null strings.
  920.  
  921. Of course you can't apply \vsplit to a box that was constructed as an \hbox.
  922. There is no \hsplit.
  923.  
  924. The old \output routine defined a sequence of items in restricted vertical mode,
  925. with the meaning that this sequence would be vboxed and shipped out.  The new
  926. \output routine defines a sequence of items in restricted vertical mode, with
  927. the meaning that this sequence will be placed in front of whatever TeX has
  928. accumulated for the following page, including whatever caused a break on the
  929. current page. Thus, if you write "\output{\unvbox255}" you are in serious
  930. danger of getting in an infinite loop.
  931.  
  932. Consider, for example, what happens if a page break occurs at some glue.  If the
  933. output routine leaves some of the tail end of the material from \box 255 in its
  934. vertical list, this material will fit perfectly before the glue that caused the
  935. previous break, since the glue following a break is not eliminated when \box255
  936. was made; glue is simply discarded when it appears at the top of the new page
  937. that is started after \output finishes.
  938.  
  939. Consider also what happens if a page break occurs at "\penalty-10000". If you
  940. understand what has just been said, you will see that this would cause repeated
  941. looping if the \output routine places something back for the next page, and this
  942. might be a problem. Therefore TeX will change the penalty to +10000 at a break,
  943. and it also sets \outputpenalty to the value of the penalty that actually caused
  944. the break. (\outputpenalty is set to 10000 if it was glue that caused the
  945. break.) Thus, you can restore the effect of a penalty by putting
  946. "\penalty\outputpenalty" at the end of your output routine.
  947.  
  948. But how does TeX figure out what to put in box 255 and how much of the
  949. insertions to put into other boxes, before it calls on your output routine?  The
  950. rules are slightly complicated, but they have been devised to handle a wide
  951. variety of situations, including situations where some inserts span several
  952. columns. It should be possible to do things like put footnotes in two columns
  953. beneath single-column text, or to put single-column footnotes beneath
  954. double-column text, etc. Here's how:  We associate \skip n, \dimen n, and \count
  955. n and \box n with \insert n.  (a) \count n gives a magnification ratio of
  956. \insert n with respect to ordinary text. For example, if two-column footnotes go
  957. with one-column text, and if footnotes are inserted with \insert250, then
  958. \count250 should be 500. If single-column footnotes or page-wide figures are
  959. being inserted with double-column text, the magnification ratio should be 2000.
  960. (b) \dimen n gives a maximum length of inserts for box n; subsequent inserts
  961. will be carried over to a following page. (c) \skip n gives a correction term
  962. when there is at least one insertion for box n.
  963.  
  964. The total length of inserts is figured as the sum, over all n such that \insert
  965. n appears on a page, of the \skip n plus (\count n over 1000) times the total
  966. natural height plus depth of all \insert n's, including the original contents of
  967. box n before any inserts were made. The badness of a page is computed from the
  968. amount of the text on the page plus the total length of inserts, and TeX breaks
  969. the page so that badness is minimized. The \vsize is the total of text plus
  970. insertions; if you are using double-column text, your \vsize should be about
  971. twice the actual page height.
  972.  
  973. If this isn't complicated enough, there is also a rule for splitting inserts, so
  974. that long footnotes can be broken between pages and so that large figures can be
  975. carried over to subsequent pages. Here's the idea: When we are deciding whether
  976. to perform an \insert n or not, we first look to see if previous \insert n's
  977. have all been completed without splitting.  If not, this one is carried over to
  978. the next page. If so, this one is put on the current page, if it does not cause
  979. the page to overflow and if it does not cause the maximum (\dimen n) to be
  980. exceeded. In the latter cases, the insertion is \vsplit to the maximum size that
  981. would not cause such overflow. For example, suppose we get to an insertion at
  982. magnification 500 when \vsize minus the current amount of text and the previous
  983. total amount of insertions leaves only 50pt of vertical space left. Suppose the
  984. insertion takes 150pt of vertical space, so that it would take 75pt after
  985. scaling; and suppose that 150pt would not exceed the maximum total size of
  986. insertions for this box. Then we essentially \vsplit the insertion list to 100pt
  987. (this will scale down to 50pt), after which the actual length of the insertion
  988. will be computed as its natural height plus depth (which might be different from
  989. 100pt). The remaining part of the insertion will be corrected for top baseline,
  990. etc., as in an ordinary \vsplit, if this broken insertion is actually chosen.
  991. But TeX will use broken insertions only if they lead to the minimum badness for
  992. the resulting page.
  993.  
  994. If several \insert n's appear on the same page they are concatenated together
  995. with no baselineskip correction between them. So you should use struts to
  996. produce the correct positioning.
  997.  
  998. Insertions are treated the same whether they appear in horizontal or vertical
  999. mode. A "floating" insertion turns out to be a special case of a broken
  1000. insertion, whose first component is a null box.
  1001.  
  1002. TeX doesn't put waiting insertions into \box255, it leaves them on the list for
  1003. the subsequent page. If insertions appear in a box that is being vsplit, they
  1004. are ignored.
  1005.  
  1006. It's too bad that these rules came out so complicated, but in simple cases the
  1007. output routines will now be quite simple, and the manual will have enough
  1008. examples to make things clear (I hope). Nothing simpler than this seems to
  1009. provide the other features that people have been demanding, and the total amount
  1010. of programming for the TeX82 page builder is not much more than there was in
  1011. TeX80.
  1012.  
  1013. * In vertical mode, you can say \prevdepth=3pt to make TeX82 act as if the
  1014. previous box had a depth of 3pt, when computing the glue between boxes to
  1015. achieve the baselineskip. If you set \prevdepth to a value less than or equal
  1016. to -1000pt, the baselineskip calculation will not be made. (This is the
  1017. case at the beginning of a vbox, or just following an hrule.)
  1018.  
  1019. * You can say \the\spacefactor and \the\prevdepth, if you are in horizontal or
  1020. vertical mode, respectively.
  1021.  
  1022. * New diagnostic features: "\showbox 10" will display the current contents of
  1023. \box10 on the terminal. There's also \showthe as in "\showthe\count 5" and
  1024. "\showthe\baselineskip". Also "\show\cs" to give a symbolic display of the
  1025. current meaning of the control sequence \cs.  The present \ddt is deleted, and
  1026. \showlists exhibits the current activities the way \ddt used to.  If you are
  1027. trying to diagnose some mysterious behavior, you can say, for example,
  1028. "\showthe\texinfo\ff 40" and you will get an error message like "\font \ff has 7
  1029. texinfo parameters" (if it has fewer than 40). Incidentally, if your error
  1030. message was "\font\fg has 7 texinfo parameters", you would know that fonts
  1031. \ff and \fg are being treated identically. (TeX loads only one copy of a
  1032. font that you mention twice. If you want to load two distinct copies, so
  1033. that you can diddle their parameters independently, you can try something
  1034. like this:  "\font \ff=cmr10 at 10pt \font \fg=cmr10 at 10.00002pt".)
  1035.  
  1036. * If you use a \skip parameter in the context of a dimension, the natural width
  1037. is used. For example, \setdimen 5=\the\baselineskip. If you use a \dimen
  1038. parameter in the context of an integer, the conversion is in units of sp (scaled
  1039. points, 2^{-16} of a pt). For example, \setcount 10= 1truept would set \count 10
  1040. equal to 65536000 divided by \mag.
  1041.  
  1042. * When you use \advskip, infinite glue wipes out finite glue.
  1043. For example, "\setskip 2=5pt plus 2pt minus 1fill
  1044.               \advskip 2 by 3pt plus 1fil minus 1fil"
  1045. is equivalent to "\setskip 2=8pt plus 1fil minus 1fill".
  1046.  
  1047. * \linepenalty is yet another parameter to control line breaking. TeX82 adds
  1048. this to the badness before squaring to get demerits. (Previously, I had
  1049. \linepenalty=1 always; by setting it a bit higher, like maybe 7 or 8, you tend
  1050. to get paragraphs that are set tighter when a line can be saved.  I don't think
  1051. it's a good idea to make \linepenalty real large, and it would be foolhardy but
  1052. weird to make \linepenalty = -10000; this apparently would minimize the number
  1053. of lines but maximize the badness!)
  1054.  
  1055. * Macro parameters are now delimited by strings instead of single items.
  1056. For example, \def\a#1ab{...} followed by \a acaab will set #1 to "aca";
  1057. \def\a b#12#{foo#1} followed by \a bbar2baz2{8} will expand to foobar2baz{8};
  1058. the latter followed by \a 2... will give an error message (\a not followed
  1059. by b). You get the error message only if there's a string before the
  1060. first parameter.
  1061.  
  1062. * Characters catcoded 13 are not equivalent to one-letter control
  1063. sequences. They act like control sequences (e.g., you can use them after
  1064. \def and \let), but & and \& will be distinct.
  1065.  
  1066. * \everypar{...} inserts its argument into TeX's scanner at the moment TeX has
  1067. changed from vertical to horizontal mode. The paragraph indentation will already
  1068. appear in the paragraph, unless of course the transition to horizontal mode was
  1069. due to \noindent.
  1070.  
  1071. * Spanned and omitted columns in alignments: If an entry in an alignment is
  1072. `\omit', the preamble text for the column is omitted in this row.  The control
  1073. sequence \span can be used in place of a tab mark, and the result is that the
  1074. surrounding entries are combined together.  You can use \omit only as the first
  1075. item of a column. If you use \cr in place of a tab mark, the effect is as if
  1076. all further columns in that row are omitted; thus, your preamble can specify
  1077. more columns than are actually used.
  1078.  
  1079. Example: \tabskip 1em plus 1em
  1080.          \halign to 20em{\ctr{#}&\rt{#}&\lft{#}\cr
  1081.                                 AAA&B&C\cr
  1082.                                 DDDDDDD\span\omit&EE\cr
  1083.                                 \omit\span FFFFF\span\omit\cr
  1084.                                 G&\omit H\span III\cr}
  1085. where all the letters are 1em wide, say. Let wij be the maximum width of the
  1086. entries that span columns i thru j.  The first line "AAA&B&C" implies that
  1087. w11>=3, w22>=1, w33>=1. The second line says that w12>=7 and w33>=2, and so on;
  1088. we find that w11=3, w12=7, w13=5, w22=1, w23=4, w33=2. Column widths are
  1089. now assigned from left to right, as follows:
  1090.         c1=w11
  1091.         c2=max(w22,w12-t1-c1)
  1092.         c3=max(w33,w23-t2-c2,w13-t1-c1-t2-c2)
  1093. where ti is the natural width of tabskip between columns i and i+1.  In this
  1094. case t1=t2=1, so c1=3, c2=3, c3=2. This means the natural width of the lines
  1095. will be 1+3+1+3+1+2+1=12 ems, so the glue will be stretching to make up the
  1096. additional 8ems; each unit of stretch is doubled. When columns are spanned,
  1097. however, TeX justifies the material into a box having the appropriate width for
  1098. the tabskip glue that was omitted; for example, an entry that spans columns 1
  1099. and 2 will be justified to width c1+t1+sf*s1+c2, where s1 is the stretchability
  1100. between columns 1 and 2, and sf=2 in this case since the glue is being doubly
  1101. stretched. (If the tabskip glue shirinks, we would of course use shrinkability
  1102. instead; in this case spanned columns might actually get smaller than their
  1103. natural size.)
  1104.  
  1105. The result of the above example, taking account of which parts of the preamble
  1106. are omitted by the \omit operations, is therefore
  1107.         |   AAA     B   C    |
  1108.         |    DDDDDDD    EE   |  (columns 1 and 2 spanned and centered)
  1109.         |            FFFFF   |  (columns 1 to 3 spanned, flush right)
  1110.         |    G   HIII        |  (columns 2 and 3 spanned, flush left)
  1111. Restriction: A single entry can span at most 256 columns.
  1112.  
  1113. * Spaces are ignored after tab marks in alignments.
  1114.  
  1115. * If every entry in an alignment that uses column j also spans column j+1,
  1116. the tabskip glue between columns j and j+1 is effectively eliminated.
  1117. Similarly, if column j never appears (because each row had \cr before
  1118. getting to that column), the tabskip glue after it is eliminated.
  1119.  
  1120. * \hbox par is eliminated! Instead of "\hbox par 100pt{...}", one now says
  1121. "\vbox{\hsize 100pt ...}" and the effect is almost the same. The only difference
  1122. is that the paragraph or paragraphs in the \vbox will have both their hanging
  1123. indentation and looseness (and perhaps also their baselineskip) specified inside
  1124. the vbox; this is, of course, more logical than the old rule.
  1125.  
  1126. Restricted vertical mode is no longer restricted; it's called "internal vertical
  1127. mode". It differs from vertical mode only in not going through the page builder,
  1128. and in allowing \unskip as well as \vskip with infinite shrinkability.
  1129.  
  1130. * To have the paragrapher work on inserted text (e.g., in footnotes), one writes
  1131. "\insert 250{\hsize 200pt ...}", perhaps using the \interlinepenalty parameter
  1132. that adds to the penalty between lines of a paragraph (whether in inserts or
  1133. not).
  1134.  
  1135. * Three new dimension parameters \displaywidth, \displayindent, and
  1136. \predisplaysize are assigned values at the beginning of every displayed formula:
  1137. (1) displaywidth is the length of the line that will contain the formula before
  1138. it is centered; this is usually equal to \hsize, except when hanging indentation
  1139. or \parshape are being employed in a paragraph.  (2) \displayindent is the
  1140. amount by which that line is indented.  (3) \predisplaysize is the amount of
  1141. copy on the line preceding the displayed formula; this is what is used to decide
  1142. between \dispskip or \dispaskip.  If the display immediately follows \noindent
  1143. or another display, \predisplaysize will be -(2^{30}-1) sp (the smallest legal
  1144. dimension in TeX). Otherwise, if the position of the last box on the previous
  1145. line is affected by glue stretching or shrinking, \predisplaysize is set to
  1146. +(2^{30}-1) sp. Otherwise \predisplaysize is set to the natural width that the
  1147. preceding line would have if all glue were removed at its right end, plus the
  1148. amount of indentation of that line, plus 2ems.
  1149.  
  1150. * \setcount, \setdimen, \setskip, \setbox, \output, and \everypar are local
  1151. definitions unless specified global. Likewise the results of \advcount, etc.
  1152.  
  1153. * The { } in \output still defines grouping (it would be too dangerous to
  1154. leave it out, since \output occurs asynchronously), but the { } in \everypar
  1155. does not. Grouping is now independent of \if tests, as explained later.
  1156.  
  1157. * All of TeX's primitives now mean the same thing in all modes. The control
  1158. sequences that were exceptions to this rule have been dealt with as follows:
  1159. \  (control space) now means a text space, even in math mode.
  1160. \quad is no longer a primitive (PLAIN defines it as \hskip 1em).
  1161. \! is no longer a primitive (PLAIN defines it for math mode only)
  1162. and \ignorespaces is a new primitive that gobbles spaces.
  1163. \- is always a discretionary hyphen; its previously advertised mathmode
  1164. function has been taken over by the new \nonscript primitive.
  1165.  
  1166. * \accent is allowed only in horizontal mode; \mathaccent only in math mode.
  1167. The latter takes a 15-bit math code, the former an 8-bit character code; it's
  1168. like the difference between \char and \mathchar.
  1169.  
  1170. The \mathaccent primitive will make use of a charlist of characters to choose
  1171. the first accent of a list whose successor is either nonexistent or wider than
  1172. the formula being accented. Thus, you can have a list of longer and longer
  1173. tildes or hats, etc.
  1174.  
  1175. * Spacing in math is slightly different: Fractions and \left...\right
  1176. subformulas are given type Inner, so there are eight types instead of seven.
  1177. (Previously Inner was treated like Ord.) The spacing matrix entries are set so
  1178. that there's at least a thin space between Inner and its neighbors, except
  1179. in the pairs Open Inner and Inner Close. There's a new primitive \mathinner
  1180. analogous to \mathpunct, etc.
  1181.  
  1182. * "\vcenter to 100pt" is now allowed in math mode, if anybody wants it.
  1183.  
  1184. * "\ifdimen" is renamed "\ifdim" and there's also "\ifnum" replacing "\ifpos".
  1185. Examples: \ifnum\count1>5...\else...\fi; \ifdim\dimen3<1.5wd2...\else...\fi.
  1186.  
  1187. * "\ifinner" is true if the current mode is internal-vertical,
  1188. restricted-horizontal, or non-display-math. Combining this with \ifvmode,
  1189. \ifhmode, \ifmmode makes it possible to determine exactly what mode you are in.
  1190.  
  1191. * New primitive \kern allows you to specify unbreakable space (without
  1192. stretching or shrinking). Thus, "\kern -1pt" is something like
  1193. "\penalty10000\hskip-1pt". There's also "\mkern 3mu" in math mode.  You are
  1194. allowed to use \kern but not \hskip in \discretionary lists.  A \kern in a word
  1195. does not upset the hyphenation algorithm.  You can use \kern in vertical as well
  1196. as horizontal lists.  It is legal to break at a kern if it is immediately
  1197. followed by glue or leaders, provided that it is not preceded by glue, kern, or
  1198. penalty.
  1199.  
  1200. * New debugging facility \tracingcommands, if nonzero, gives a symbolic
  1201. indication of what commands are being obeyed by TeX's main control routine.
  1202.  
  1203. * New integer parameter \maxdeadcycles gives an upper limit on how many
  1204. consecutive invocations of \output do not cause at least one \shipout.  This is
  1205. intended to catch unintended loops. Default is 25.
  1206.  
  1207. * If \tracingstats > 0, you get to see how close you came to TeX's current
  1208. table capacities, in a list of statistics printed at the end of your run.
  1209. If \tracingstats > 1, you also get to see the current memory usage
  1210. every time you do a \shipout.
  1211.  
  1212. * If \tracingparagraphs > 0, you get a huge amount of inscrutable printout
  1213. about what the line-breaking algorithm thinks it is doing.
  1214.  
  1215. * If \tracingpages > 0, you get similarly inscrutable printout
  1216. about what the page-breaking algorithm thinks it is doing.
  1217.  
  1218. * But \tracingstats, \tracingparagraphs, and \tracingpages are ignored
  1219. unless TeX has been compiled in a "slow version" that actually maintains
  1220. these statistics.  (The SAIL version of TeX is currently "slow" in this way.)
  1221.  
  1222. * \string replaces the next token by its text, with all characters regarded
  1223. as type otherchar (except that a space will be of type spacer; it's possible
  1224. but not easy to get a space here). For example, \string\abc results in four
  1225. characters \, a, b, c. This expansion occurs just as for \number, i.e., when
  1226. \string occurs in \xdefs or in horizontal or math mode. (The most common
  1227. use of \string is to follow it with a macro parameter.) Caution:
  1228. If characters in a control sequence name are nonstandard in ascii, they
  1229. will be converted differently at different installations.
  1230.  
  1231. * Here is an extension to the language intended to placate people who
  1232. have objected to the fact that \write (and \openout and \closeout) only
  1233. cause action at the time of the next \shipout. Some applications
  1234. call for immediate output, hence a new feature: \immediate followed by
  1235. \openout or \write or \closeout causes the output action to take place
  1236. without delay. For example, \immediate\write0{x} is equivalent to
  1237. \shipout\vbox{\write0{x}} except that the latter also puts an empty
  1238. page into the DVI file.
  1239.  
  1240. * New parameter \boxmaxdepth affects \vbox: If the depth of the box
  1241. would exceed \boxmaxdepth according to the normal rules, the box contents
  1242. are shifted up so that the depth is exactly \boxmaxdepth, before setting
  1243. the glue. The same applies to \vtop, before adjusting its depth.
  1244. The default setting is \boxmaxdepth='7777777777sp (the maximum dimension).
  1245.  
  1246. * You can now use \let with non-control-sequences after the = sign.
  1247. For example, \let\zero=0 makes the control sequence \zero behave something
  1248. like the digit zero; but if you want to make the constant 100 by saying
  1249. "1\zero 0" you still have to \def\zero{0}. Thus, this new extension isn't
  1250. a big breakthrough, but it does save a bit of space and time inside TeX.
  1251. (Incidentally, after \let\zero=0, \zero will not expand to 0 in xdefs.)
  1252.  
  1253. * Popular demand wins again: You can now say \csname <string>\endcsname
  1254. to manufacture a control sequence name. For example, \csname foo \endcsname
  1255. is essentially identical to a control sequence named "\foo " (note that
  1256. the space is part of that name!) and \csname foo\endcsname is like "\foo"
  1257. and, after \def\zero{0}\def\test{zero}, it follows that
  1258. \csname\csname\test\endcsname\endcsname is like "\0". The conversion
  1259. from token list to control sequence occurs as if \csname were a
  1260. macro being expanded. If the control sequence hasn't been defined before,
  1261. it will behave as if it were "\relax".
  1262.  
  1263. * In the preamble to \halign or \valign, the primitive \span would normally
  1264. make no sense. But it causes TeX to expand the following token, instead of
  1265. just copying it, before inserting that token in the preamble.
  1266. (Previously this was possible only with a dirty "\tabskip" trick, since
  1267. TeX expands whatever follows "\tabskip 0pt" looking for "plus".)
  1268.  
  1269. * Syntactic conditionals!
  1270. For years people have been asking for TeX to treat conditionals in its
  1271. "mouth" rather than in its "stomach", and I have been fending them
  1272. off. But starting with Version 0.8 of TeX82, \if tests are made at the
  1273. time of macro expansion rather than as part of the semantic processing in
  1274. horizontal or vertical or math mode.
  1275.  
  1276. Instead of writing \if...{..a..}\else{..b..} the new syntax is
  1277.         \if... ..a..\else..b..\fi
  1278. (with \else optional if ..b.. is empty).
  1279.  
  1280. Whenever TeX is reading material in a mode where macros are now expanded,
  1281. it will process conditionals somewhat as though they were macros. Namely,
  1282. \if... results in evaluating the condition and skipping code if the condition
  1283. isn't true (skipping to the next \else that isn't enclosed by \if..\fi
  1284. brackets); \else, \or, and \fi switch in the appropriate way between
  1285. reading and not reading text.
  1286.  
  1287. Braces need not be properly nested inside the conditionals, nor do \if...\fi's
  1288. need to be properly nested in the replacement texts of macros.
  1289. (Having these two types of nesting independent of each other has proved
  1290. to be important in many existing macro processors. Caveat implementor.)
  1291.  
  1292. People who try things like \expandafter\else\if... should be shot.
  1293. (Unless it turns out that this is useful?)
  1294.  
  1295. * Another token-list parameter \tokens is definable like \everypar.
  1296. Its only use is for things like \the\tokens (which, in an \xdef,
  1297. emits the current value of \tokens without further macro expansion).
  1298.  
  1299. * Another test, \ifcat, is like \if but it tests the catcodes of the
  1300. characters, not their ascii codes.
  1301.  
  1302. * \everymath{...} inserts its tokens into TeX's scanner just when
  1303. non-display math mode has been entered. \everydisplay{...} does likewise, but
  1304. for displays. For example, \everymath{\fam0} sets up family 0 instead of
  1305. family-1 as the default for letters; you can also use \everymath
  1306. to redefine active characters that you want to behave differently
  1307. in math mode.
  1308.  
  1309. * \futurelet\a followed by tokens b and c has the effect of "\let\a= c"
  1310. followed by tokens b and c. You can use this to look ahead at the
  1311. next token after a macro; it's for hackers. (I put it in because it
  1312. is easy and because it might allow me to solve some problem next year.)
  1313.  
  1314. * \prevgraf is an internal state variable something like \prevdepth and
  1315. \spacefactor. It represents the number of lines in the most recently
  1316. completed paragraph or partial paragraph. You can use it to provide
  1317. "memory" between paragraphs with respect to \parshape and \hangindent.
  1318. For example, if you say "\indent \prevgraf=15 This new paragraph..."
  1319. the new paragraph will be formatted as if 15 lines had already been
  1320. completed. You can look at \the\prevgraf to see how big the last
  1321. paragraph was.
  1322.  
  1323. * \endinput (in any mode) forces end-of-file whenever the next line of
  1324. \input has been fully read. This omits the all-blank line that is normally
  1325. appended at the end of a file that terminates normally. \input is now
  1326. allowed in any mode, not just vertical mode.
  1327.  
  1328. * \hangindent <dimen> no longer looks for keywords "for" and "after"; it's
  1329. just like all of TeX's dimen parameters. \hangafter is another parameter
  1330. that provides the missing information. Suppose \hangafter equals n.
  1331. If n is nonnegative, hanging indentation applies to lines n+1, n+2, ...;
  1332. otherwise hanging indentation aplies to lines 1, ..., |n|.
  1333. For example, the old "\hangindent 10pt for 2" now becomes
  1334. "\hangindent=10pt \hangafter=-2". The old "\hangindent 20pt" (without
  1335. "for" or "after") is unchanged, because TeX sets \hangafter=1 after
  1336. each paragraph and whenever entering internal vertical mode.
  1337. [Reason for this change: It became all too obvious that the old system
  1338. was a kludge, when I tried to describe it in the new manual.]
  1339.  
  1340. * \clubpenalty (a new parameter) applies after the first line
  1341. of a paragraph; \widowpenalty before the last line. (These used to
  1342. both be called \widowpenalty. Geoffrey Glaister, U. of Calif. Press 1979,
  1343. Glossary of the Book, distinguishes in this way between "club lines"
  1344. and "widow lines". The TeX manual sets \clubpenalty=10000 to suppress
  1345. breaks after the first line of paragraphs that have dangerous bend
  1346. on their first two lines.)
  1347.  
  1348. * \jobname returns the name of this TeX job. For example, if the output
  1349. goes to file foo.dvi, \jobname is "foo".
  1350.  
  1351. * \pagetotal and \pagegoal are internal dimensions representing the
  1352. natural height and goal height of the current page. Previously you
  1353. could see these only as a result of \showlists; now you can even
  1354. set them. If a page is empty, \the\pagetotal is 0pt and \the\pagegoal
  1355. is -1000pt. Setting \pagegoal has no effect on an empty page, since
  1356. \pagegoal gets set to \vsize as soon as the page gains its first item.
  1357. Besides \pagetotal, there is also \pagestretch, \pagefilstretch,
  1358. \pagefillstretch, \pagefilllstretch, and \pageshrink, denoting the total
  1359. flexibility of glue on the current page; and \pagedepth is the depth.
  1360.  
  1361. * \deadcycles is an internal integer that is set to zero on each \shipout
  1362. and increased by 1 each time your \output routine is invoked. At the \end,
  1363. null boxes will be ejected until the current page and recent contributions
  1364. are empty and \deadcycles=0. Thus, you should set \deadcycles=0 yourself
  1365. if you have an unusual output routine.
  1366.  
  1367. * \insertpenalties is the sum of penalties from split insertions and
  1368. floating insertions. \floatingpenalty is the amount added to \insertpenalties
  1369. when an insertion is being held over following one that is split.
  1370. \insertpenalties is the number of heldover insertions during the time an
  1371. \output routine is active.
  1372. (All of this should become clear in the new user manual...)
  1373.  
  1374. * New integer parameter \globaldefs (is normally zero). If positive, all
  1375. definitions are global; if negative, all definitions are local
  1376. even when they are prefixed by \global. (Of course, some definitions
  1377. are inherently global and will stay that way: \texinfo is global,
  1378. and so are things like \prevdepth, \spacefactor, \pagegoal, \deadcycles.)
  1379. Example of use: \def\GLOBAL#1{\begingroup\globaldefs=1 #1\endgroup}
  1380. allows you to say \GLOBAL\tracingall.
  1381.  
  1382. * \mathchoice{D text}{T text}{S text}{SS text}, where the texts are
  1383. arbitrary math mode formulas, is now allowed in math mode. TeX will use
  1384. whatever text fits the style that eventually governs this part
  1385. of the formula.
  1386.  
  1387. * \limitswitch is replaced by three primitives \displaylimits, \nolimits,
  1388. \limits.  The last of these takes the superscript and subscript and puts
  1389. them as limits above and below the operator; the first (which is the
  1390. default) does this in display style only; \nolimits gives ordinary
  1391. subscripts and superscripts.  (Now for the first time you can display
  1392. limits in superscripts, using \scriptfont3, if you really want to.)  To
  1393. change old files, you probably need only to replace \limitswitch by \nolimits;
  1394. also redefine \int and \oint to include \nolimits.
  1395.  
  1396. * \chardef is analogous to \mathchardef: instead of saying
  1397. \def\foo{\char<number>} you can say \chardef\foo.
  1398. Furthermore, both \chardef and \mathchardef define control sequences
  1399. that can be used as integers. For example, the allocation command
  1400. \newcount\exno in plain TeX used to produce \def\exno{28 } (for example),
  1401. but now it produces \chardef\exno=28. This is more efficient in both
  1402. time and space. A \chardef is limited to the range 0..255; \mathchardef
  1403. has the range 0..32767.
  1404.  
  1405. * \input is treated in the syntax level, so you can say
  1406. \expandafter\foo\input bar (in case you want to input a file that
  1407. doesn't start with any particular macro). But recursive use
  1408. (e.g. \input\input f to get one file name from another) isn't allowed.
  1409.  
  1410. * \unbox becomes \unhbox and \unvbox (which are capable of unboxing
  1411. only hboxes and vboxes, respectively). Previously you could say
  1412. \unbox in either horizontal or vertical mode, but you had to be in
  1413. the right mode to match the box; now if you say \unhbox in vertical mode,
  1414. or \unvbox in horizontal mode, TeX switches to the correct mode
  1415. before doing the unboxing. (The reason the new syntax is needed is that
  1416. TeX couldn't otherwise provide this feature without parsing the number
  1417. that follows the \unbox, but then when switching to horizontal mode would
  1418. have to insert \everypar before the stuff that was already parsed; it
  1419. gets pointlessly complicated that way.)
  1420.  
  1421. * \unhcopy <number> and \unvcopy <number> are added too; they produce a
  1422. copy of the inside of a box.  One application is that \struts are now more
  1423. efficient: You can define a strut box that contains a \vrule, and
  1424. "\def\strut{\unhcopy\strutbox}". Previously, TeX had to scan the
  1425. keywords "height" "width" and "depth" and their dimensions whenever it
  1426. appended a rule; but rules of width zero make good struts since they take
  1427. less memory than boxes. Furthermore, with this new system you can use a
  1428. strut to begin a paragraph (even if a box comes first in the paragraph),
  1429. instead of saying "\ \unskip" or "\hskip0pt".
  1430.  
  1431. (the following changes have been introduced in version 0.96)
  1432.  
  1433. * Blank space is no longer ignored after a control sequence name of the form
  1434. <escape character><nonletter>. For example, this applies to \/ and \\
  1435. and \" and \' and \`. However, any blank spaces after <escape character><space>
  1436. are ignored, as part of the general rule that consecutive blanks are treated
  1437. as single blanks.
  1438.  
  1439. * \crcr acts like \cr except if it appears at the very beginning of an
  1440. alignment line; in the latter case it is ignored. Thus, if you're writing
  1441. a macro that generates alignment, you can put in an \crcr, which will cover
  1442. for users who forgot the final \cr in their argument to the macro.
  1443.  
  1444. * Trailing blanks are removed from all input lines. This makes TeX fully
  1445. compatible between IBM-like installations (where lines have fixed width)
  1446. and DEC-like ones (where lines are terminated by carriage returns).
  1447.  
  1448. * The glue above and below displayed equations no longer needs to be the
  1449. same. (And it shouldn't be, because a change to \baselineskip inside
  1450. the $$'s will affect the top distance but not the bottom one...)
  1451. \abovedisplayskip and \belowdisplayskip take the place of \dispskip.
  1452. \abovedisplayshortskip and \belowdisplayshortskip take the place of
  1453. \dispaskip and \dispbskip.
  1454.  
  1455. * \postdisplaypenalty is the penalty for page breaking after a display
  1456. (just before the \belowdisplayskip glue). \predisplaypenalty is
  1457. the penalty for break before a display (just before the \abovedisplayskip
  1458. glue). \displaywidowpenalty is the penalty for breaking between
  1459. lines of a paragraph in such a way that there's just one line before a display.
  1460.  
  1461. * \tracingrestores=1 will print a symbolic indication of what values
  1462. have been restored at the end of a group, on your log file, if
  1463. TeX has been compiled with its "stats" switch on. For example,
  1464. consider `\lineskip=3pt{\lineskip=4pt.....}'; when the } is sensed,
  1465. your log file will say `{restoring \lineskip=3.0pt}'.
  1466.  
  1467. * \iftrue and \iffalse are new conditional tests that always go
  1468. one way or the other. To use them, you can say, e.g.,
  1469.         \let\iftitlepage=\iftrue
  1470. and later on make tests like
  1471.         \iftitlepage ... \else ... \fi.
  1472. Plain TeX provides a macro \newswitch such that, e.g., \newswitch{titlepage}
  1473. defines two new control sequences \titlepagetrue and \titlepagefalse;
  1474. the first of these expands to \let\iftitlepage=\iftrue.
  1475. You should use this convention instead of saying "\let\iftitlepage=\iftrue"
  1476. explicitly in your manuscript, because the "\iftrue" in the latter will
  1477. get TeX mixed up if it is skipping over unexecuted conditional text.
  1478.  
  1479. * \everyvbox{...} specifies a list of tokens to be inserted just after
  1480. the opening left brace of \vbox, \vtop, and \vcenter. Similarly,
  1481. \everyhbox{...} specifies a token list for the beginning of \hbox.
  1482. One use of these might be to "shut off" macros that were "turned on"
  1483. by \everymath and \everydisplay.
  1484.  
  1485. * \romannumeral <number> joins \string<cs> and \number<number> and \jobname as
  1486. ways to emit text. For example, \romannumeral 324 comes through TeX's
  1487. scanner as "cccxxiv" (unless macros are not being expanded);
  1488. if \count5=-123, \number\count5 comes through as "-123".
  1489. If the number is zero or negative, \romannumeral emits no text.
  1490.  
  1491. Some new macros of PLAIN.TEX
  1492.  
  1493. The following macros are superior to their "basic.tex" counterparts,
  1494. and they are going to be explained in the new manual. Meanwhile,
  1495. until you see the new manual, the only way to figure out how to
  1496. best use them is to look at the way they are defined in plain.tex...
  1497.  
  1498. * Instead of \ldotss use just \ldots, if followed by something
  1499. other than a closing delimiter inside a formula; instead of
  1500. $\ldotss$, use \dots; instead of $<something>\ldotss<something>$ in
  1501. other cases, use "\ldots\,".
  1502.  
  1503. * Instead of \twoline, use \displaylines.
  1504.  
  1505. * Instead of \chop, use \smash.
  1506.  
  1507. * Instead of \cpile, use \matrix.
  1508.  
  1509. (the following changes have been introduced in version 0.97)
  1510.  
  1511. * Undelimited macro parameters will not be set to "space" unless
  1512. you explicitly say "{ }". For example, in \def\a#1#2#3.#4{...},
  1513. parameters #1, #2, and #4 are undelimited, while #3 is delimited by a period.
  1514. In TeX80, if you said "\a x y z. w" the result was #1=x, #2=space,
  1515. #3=y z, and #4=space; this caused confusion. Similarly if you
  1516. said \a{...} at the end of a line, you got a space for #2 because
  1517. of the carriage return. In TeX82 versions >0.96, you will get
  1518. #1=x, #2=y, #3= z (including the space), #4=w.
  1519.  
  1520. * \everyjob{<tokens>} specifies something that will be put into TeX's
  1521. scanner at the beginning of every job. (This is useful only in a
  1522. format that is \dump ed, because otherwise the job has already started!)
  1523.  
  1524. * \ifeven disappears; \ifodd<number> takes its place, where <number>
  1525. is the number being tested (not the number of a count register).
  1526. Thus, where you used to say
  1527.         \ifeven n  alpha \else beta \fi
  1528. you now say
  1529.         \ifodd\count n beta \else alpha \fi
  1530.  
  1531. * \if and \ifcat no longer give error messages in cases like "\if\par\let";
  1532. unexpandable control sequences are regarded as having character code 256
  1533. and category code 16. Thus, you can use \if without fear of an error
  1534. stop when the user's input is unexpected.
  1535.  
  1536. * \leaders will align from the left of the smallest enclosing box, rather
  1537. than from the largest. Thus, for example, if you \moveright a box
  1538. that contains leaders, the leaders will move right with it.
  1539.  
  1540. * If you say && in the preamble to \halign and \valign, the preamble
  1541. will infinitely repeat the material to its right. For example,
  1542. \halign{\indent#\hfil&&\hfil#\hfil&#&\cr is like
  1543. \halign{\indent#\hfil&\hfil#\hfil&#&\hfil#\hfil&#&\hfil#\hfil...\cr
  1544. for as many columns as are actually used. This makes it possible
  1545. to write, e.g., a \matrix macro that has no maximum number of columns.
  1546. (If you say && twice in the same preamble, the second && is erroneous.)
  1547.  
  1548. * \read will read several lines, if necessary, until the number of
  1549. left braces equals the number of right braces. "\outer" control sequences
  1550. should not appear in the input.
  1551.  
  1552. * \uppercase and \lowercase now apply to all character tokens in the token list,
  1553. including active characters. (Previously they applied only to characters
  1554. of categories 11 and 12.)
  1555.  
  1556. (updates to the April 1983 manual)
  1557. (these changes were insalled in version 0.98)
  1558.  
  1559. * \read n to \cs will not print an explicit prompt message if n<0.
  1560. \write n {...} will print only on the log file (not the terminal) if n<0.
  1561.  
  1562. * New parameters \hoffset and \voffset will offset the output position.
  1563. For example, \hoffset=.5in shifts subsequent output right by half an inch;
  1564. \voffset=1.5in shifts it down 1.5in with respect to its normal position.
  1565. (The \shipout command adds these offsets to all coordinates of things
  1566. that it is shipping out.)
  1567.  
  1568. * Here is a fairly major change with respect to TeX macro programs.
  1569. The notation for parameters and registers is unified and made more efficient.
  1570. 1) You don't need \the anymore when using a parameter in an expression.
  1571. Thus, \hbox to\hsize works. (So does \hbox to\the\hsize, since a redundant
  1572. \the is allowed.) Same for \the\texinfo, \the\lastskip, etc.; \the is
  1573. mainly to be used inside \xdef and such things, now. \minusthe disappears.
  1574. 2) \setcount is eliminated, you just write \count. Similarly \setdimen
  1575. and \setskip and \setmuskip are eliminated.
  1576. 3) \advcount, \advdimen, etc. are now \advance\count, \advance\dimen, etc.;
  1577. similarly there is \multiply and \divide. These will work with
  1578. parameters as well as registers; e.g., "\advance\abovedisplayskip by 3pt".
  1579. 4) To compensate for the extra token (\advcount split into two), there
  1580. are new commands \countdef, \dimendef, \skipdef, and \muskipdef
  1581. (analogous to \chardef and \mathchardef). For example,
  1582. \countdef\c=5 makes \c a shorthand for "\count5".
  1583. 5) "dm" is eliminated as a unit, but instead you can write .5\hsize
  1584. or .5\dimen<number>. "vu" and \varunit are also eliminated, as they
  1585. are now unnecessary.
  1586.  
  1587. The \newcount...\newmuskip macros now give their results in terms of
  1588. \countdef...\muskipdef, not \chardef.  One consequence is that \dimendef
  1589. makes a control sequence behave syntactically like a new dimen parameter.
  1590. For example, it would now be possible to say "\newdimen\hoffset" and to
  1591. incorporate \hoffset in one's \output routine, thereby making the new
  1592. \hoffset parameter unnecessary. Previously, you would have had to tell
  1593. users to give values to symbolic dimensions by constructions like
  1594. "\def\hoffset{.5in}" because of the incompatibility between register
  1595. syntax and parameter syntax. (I apologize for letting this shameful
  1596. incompatibility creep in, years ago. Soon it will be gone forever.)
  1597.  
  1598. * Here's a simple way to update old macros so that they work with version 0.98:
  1599. Case (1), you have not used \newcount, \newdimen, etc.:
  1600. Replace \setcount by \count, \setdimen by \dimen, \setskip by \skip,
  1601. and \setmuskip by \muskip.
  1602. Replace \advcount by \advance\count, \advdimen by \advance\dimen,
  1603. \advskip by \advance\skip, \advmuskip by \advance\muskip.
  1604. Replace \multcount by \multiply\count, \multdimen by \multiply\dimen,
  1605. \multskip by \multiply\skip, \multmuskip by \multiply\muskip.
  1606. Replace \divcount by \divide\count, \divdimen by \divide\dimen,
  1607. \divskip by \divide\skip, \divmuskip by \divide\muskip.
  1608. [That doesn't give the most efficient programs, but it will tide you
  1609. over until you have time to rewrite things.]
  1610.  
  1611. Case (2), you have used, e.g., \newcount\foo:
  1612. Replace \setcount\foo by \foo, \the\count\foo by \the\foo,
  1613. \advcount\foo by \advance\foo, \multcount\foo by \multiply\foo,
  1614. \divcount\foo by \divide\foo. Similarly for \newdimen et al.
  1615.  
  1616. * \everycr{...} inserts its tokens just after TeX has processed \cr or \crcr.
  1617. (Except if the \crcr was ignored because it came right after \cr.)
  1618.  
  1619. * \hyphenchar<font>=<number> defines the character to be used for
  1620. hyphens in that font. If the number is negative or greater than 255,
  1621. no hyphenation will be done. Default is '55.
  1622.  
  1623. * \skewchar<font>=<number> defines a character to be used to position
  1624. accents in math mode. (This makes it unnecessary for a user to refer
  1625. to a long, horrible "\skew" table like that in the April draft of the manual!)
  1626. When TeX puts a math accent over a character, it shifts the accent to the
  1627. right by the amount of kern between that character and the skew character.
  1628. Default is -1.
  1629.  
  1630. * Furthermore, when a single character is accented, the subscripts and
  1631. superscripts of the accented combination are now attached exactly as they
  1632. would have been without the accent. (Previously, "\hat A^2" put the 2 too
  1633. high, and "\hat P_2" put the 2 too far away from the P; now both
  1634. cases have been fixed.)
  1635.  
  1636. * New syntax: \texinfo<font><number> becomes \fontdimen<number><font>.
  1637. This means that you can define, e.g., \fontspace to be an abbreviation for
  1638. "\fontdimen2" and then you can set \fontspace<font>=10pt (analogous to
  1639. \skewchar).
  1640.  
  1641. * \meaning and \noexpand are new primitives that affect macro expansion:
  1642.  
  1643. \meaning<token> expands to the sequence of characters that would be
  1644. displayed on the terminal by the existing commands
  1645.         \let \test = <token> \show\test
  1646. For example, "\meaning A" expands to "the letter A" (a sequence of twelve
  1647. character tokens, all type otherchar except the spaces). After
  1648. \def\A#1B{\C}, "\meaning\A" will expand to "macro:#1B->\C " (a sequence
  1649. of fourteen tokens). You can use this in an emergency when \if and
  1650. \ifcat and \ifx don't tell you what you need to know about a token.
  1651.  
  1652. \noexpand<token> produces the token, but changes its meaning to the
  1653. meaning of TeX's \relax primitive if that token would ordinarily
  1654. be expanded. Thus, it's now easier to suppress macro expansion;
  1655. and you can use \noexpand fruitfully after \if or \ifcat when you
  1656. are testing the nature of an unknown token (e.g., a token that
  1657. has been found by \futurelet).
  1658. Note the following: \catcode`\~=13 \ifcat\noexpand@\noexpand~true\fi
  1659. yields "true", but \ifcat\relax\noexpand~true\fi doesn't;
  1660. i.e., the TeXbook's conceptual model of token lists, in which an active
  1661. character carries category code 13 as a "subscript", is now implemented.
  1662.  
  1663. * \afterassignment<token> saves the token and reinserts it into TeX's input
  1664. mechanism after the next assignment has been performed. An assignment is a
  1665. \def or \let or a command that assigns a value to a control sequence or
  1666. internal register; a complete list of assignments will appear in Chapter 24
  1667. of The TeXbook. The main intended use of \afterassignment is this: If a the
  1668. replacement text of a macro ends with "\afterassignment\continue \dimen0=",
  1669. then TeX will assign to \dimen0 whatever <dimen> follows the macro, after
  1670. which it will perform \continue. Similarly, you can end with an assignment
  1671. that causes TeX to parse <glue> or a font name or even a \parshape.
  1672.  
  1673. Changes to PLAIN.TEX conventions since the April manual:
  1674.  
  1675. * The \openup macro now takes a decimal argument, not a dimension; the
  1676. decimal number is multiplied by \openupdimen, which plain TeX sets to 3pt.
  1677. Thus, where the manual says "\openup{3pt}", you now say "\openup1"; where
  1678. it says "\openup{-3pt}", you now say "\openup{-1}"; and fractional amounts
  1679. like "\openup{.5}" are legit.
  1680.  
  1681. * The character for "ties" between words has been changed from @ to ~. The
  1682. next generation of fonts will have an at sign in the normal ascii place,
  1683. so @ will not be mentioned specifically as a special character in the
  1684. TeXbook. But for the time being (until we have the new fonts), you still need
  1685. to say \@ to get an at sign from the math symbols font. Some day there won't
  1686. be an at sign in that font, but you'll have bold and italic at signs in
  1687. your bold and italic fonts!
  1688.  
  1689. Incidentally, although this doesn't affect users, PLAIN and LATEX and AMSTEX
  1690. will be using @ as a letter in the names of control sequences that aren't
  1691. supposed to be easily redefinable.
  1692.  
  1693. * In math formulas, " is no longer used for double prime; the notation is
  1694. f''(x) instead of f"(x), and f'''(x) will also work. In other words, " is
  1695. now unconstrained, while a sequence of n apostrophes is converted into
  1696. ^{\prime...\prime}   (there are n occurrences of \prime).
  1697.  
  1698. (changes installed in version 0.99)
  1699.  
  1700. Version 1.0 is almost here! Just a few more touchups...
  1701.  
  1702. * "wd", "ht", and "dp" are changed to \wd, \ht, and \dp. (This is something
  1703. like the recent change where "dm" was changed to \dimen.) That means you
  1704. don't have to say "1wd0" to get the width of \box0, you just say "\wd0".
  1705. Furthermore, you can now assign new dimensions to a box, instead of
  1706. relying on trickery: For example, \ht0=2pt changes the height of \box0
  1707. to 2pt, independent of what the height was formerly. (But it has no
  1708. effect if \box0 is void. The prefix \global is ignored if you happen
  1709. to say \global\ht0=2pt.)
  1710.  
  1711. * \tokens is being generalized to a set of 256 registers called \toks0
  1712. through \toks255. And there is "\toksdef". Plain TeX will contain
  1713. a \newtoks allocation macro, of course. (Thus you get symbolic names
  1714. for lists of tokens that are unlike macros since you can insert
  1715. them into edefs and messages with one-level expansion only.)
  1716. [Note: Say "\toksdef\tokens=0" to make your previous programs work.]
  1717.  
  1718. * \insert, \vadjust, and \mark are allowed in restricted horizontal mode
  1719. and in math mode. However, they won't always migrate outside their boxes
  1720. into the main vertical list; migration from an hbox happens only if the
  1721. hbox was typeset on the outer level of a vertical list (most uses of
  1722. \centerline fit this description) or if the hbox was formed for an
  1723. \halign entry.  Migration from math mode happens only if the item is on
  1724. the outer level of a math formula (not in a subformula) and if the formula
  1725. is displayed or if it appears in a paragraph or hbox that allows
  1726. migration.  Otherwise you to unbox them if you really want to use them.
  1727. This makes \hbox and \vbox work approximately the same.
  1728.  
  1729. * \font is now acceptable as a font identifier in contexts like
  1730. "\fontdimen6\font" and "\hyphenchar\font" and "\textfont0=\font".
  1731. It denotes the current font.
  1732.